/*
 * Simulation.h
 *
 *  Created on: Sep 21, 2012
 *      Author: snirgaz
 */

#ifndef SIMULATION_H_
#define SIMULATION_H_

#include "SSEConf.h"
#include "Move.h"
#include "HelpLibs/RandomGen.h"
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/mean.hpp>
#include <boost/accumulators/statistics/moment.hpp>
#include "Measure.h"
#include <fstream>

namespace ba = boost::accumulators;

class Simulation {
private:
	QmcParameters qmcParameters_;
	// Random Number Engine
	MTGen eng_;
	SSEConf sseConf_;
	DiagonalUpdate diagonalUpdate_;
	LoopUpdate loopUpdate_;
	Measurements measures_;
	ofstream outFile_;
public:
	Simulation();
	void init();
	void adjustCutOff();
	void run();
	void init(QmcParameters &qmcParameters);
	void dump();
	virtual ~Simulation();
};

#endif /* SIMULATION_H_ */
